const birdDom = document.querySelector(".bird")

const birdStyle = getComputedStyle(birdDom)

const birdWidth = parseFloat(birdStyle.width)
const birdHeight = parseFloat(birdStyle.height)
const birdtop = parseFloat(birdStyle.top)
const birdleft = parseFloat(birdStyle.left)

//获得游戏窗口高度
const gameHeight = document.querySelector('.game').clientHeight

class Bird extends Rectangle {
    constructor() {
        /* 初始 纵向速度为0，要先通过加速度改变速度，再将速度传入
           父类，通过父类计算移动距离，再渲染 */
        super(birdWidth, birdHeight, birdleft, birdtop, 0, 0, birdDom)

        //小鸟加速度
        this.g = 1500   // 重力加速度  单位：px/s^2

        //最大的y坐标
        this.maxY = gameHeight - landHeight - birdHeight
        this.minY = 0

        //小鸟的翅膀状态
        this.swingStatus = 0
        //计时器变量
        this.timer = null
        //停止时禁用小鸟跳跃
        this.flag = true
    }

    //重写move方法
    move(duration) {
        //调用父类move方法
        super.move(duration)
        this.yspeed = this.g * duration + this.yspeed
    }

    //划定移动范围 最大的y坐标
    onMove() {
        if (this.top > this.maxY) {
            this.top = this.maxY
        }
        if (this.top < this.minY) {
            this.top = this.minY
            //重置速度为0
            this.yspeed = 0
        }
    }

    //直接给一个向上的速度（负的向上），加速度始终向下（正的）
    jump() {
        //当暂停时，让flag = false，禁用跳跃
        if (this.flag) this.yspeed = -500
    }

    //重新渲染小鸟render方法
    render() {
        super.render()    //重用父类逻辑
        this.dom.className = `bird swing${this.swingStatus}`
    }

    //小鸟翅膀
    startSwing() {
        this.timer = setInterval(function () {
            //因为使用了 setInterval，所以 this 指的不是 bird对象
            //所以这里要指明 bird对象
            bird.swingStatus++
            if (bird.swingStatus > 2) {
                bird.swingStatus = 0
            }
            bird.render()
        }, 200)
    }

    stopSwing() {
        clearInterval(this.timer)
    }
}

//实例化
let bird = new Bird()

bird.startSwing()

setInterval(function () {
    bird.move(16 / 1000)
}, 16)